package org.example.scoresystem_backen.dto;

import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import org.example.scoresystem_backen.entity.Student;

import java.time.LocalDateTime;

/**
 * 学生信息包含班级信息的DTO
 * 用于返回学生列表时包含班级名称和年级信息
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class StudentWithClassDTO {

    /**
     * 学生id
     */
    private Integer id;

    /**
     * 学生学号
     */
    private String sno;

    /**
     * 学生姓名
     */
    private String name;

    /**
     * 密码
     */
    private String password;

    /**
     * 创建时间
     */
    private LocalDateTime createdTime;

    /**
     * 更新时间
     */
    private LocalDateTime updatedTime;

    /**
     * 班级ID
     */
    private Integer classId;

    /**
     * 班级名称
     */
    private String className;

    /**
     * 年级
     */
    private String classGrade;

    /**
     * 班级显示名称（年级+班级名称）
     */
    private String classDisplay;

    /**
     * 从Student实体构造DTO（不包含班级信息）
     */
    public StudentWithClassDTO(Student student) {
        this.id = student.getId();
        this.sno = student.getSno();
        this.name = student.getName();
        this.password = student.getPassword();
        this.createdTime = student.getCreatedTime();
        this.updatedTime = student.getUpdatedTime();
        this.classId = student.getClassId();
    }

    /**
     * 设置班级信息并生成显示名称
     */
    public void setClassInfo(String className, String classGrade) {
        this.className = className;
        this.classGrade = classGrade;
        if (className != null && classGrade != null) {
            this.classDisplay = classGrade + "级" + className;
        } else {
            this.classDisplay = "未分配班级";
        }
    }
}
